package utp.tepc.usina;

import java.util.Random;

/**
 * @author Jackson
 * @version 1.0
 * @created 09-jun-2011 20:30:28
 */
public class GeradorRandomico implements ISensor
{
    private ControleOcorrencia controle;
    private Random rand;
    
    public GeradorRandomico()
    {
    }

    @Override
    public float getTemperatura(Otimo otimo) throws Exception
    {
	if(!(otimo instanceof OtimoTemperatura))
	    throw new Exception("ERRO: Tipo de varição deve ser TEMPERATURA");
	
	return this.simular(otimo);
    }

    @Override
    public float getPressao(Otimo otimo) throws Exception
    {
	if(!(otimo instanceof OtimoPressao))
	    throw new Exception("ERRO: Tipo de varição deve ser PRESSÃO");
	
	return this.simular(otimo);
    }

    @Override
    public int equalizarPor()
    {
	// TODO Auto-generated method stub
	return 0;
    }
    
    private float simular(Otimo ot) throws Exception
    {
	this.controle = ControleOcorrencia.getInstancia();
	this.rand = new Random();
	float rangInicio; 
	float rangFim;
	float range;
	float var = 0;
	
	if(ot instanceof OtimoPressao)
	    var = 0.02f;
	else
	    var = 0.2f;
	
	if(this.controle.getOcorrencia(ot) == TipoOcorrencia.NaoOtimo)
	{
	    rangInicio = ot.getMax();
	    rangFim = (float)(ot.getMax() + (ot.getMax() * var));
	} 
	else
	{
	    rangInicio = ot.getMin();
	    rangFim = ot.getMax();
	}
	
	range = rangFim - rangInicio;

	float r = (float)(range * this.rand.nextDouble()) + rangInicio;
	this.rand = null;
	return r;
    }
}